package loja.dao.impl.hibernate;

import loja.dao.DAOFactory;
import loja.dao.compra.CompraDAO;
import loja.dao.compra.pedido.PedidoCompraDAO;
import loja.dao.conta.ContaAbstrataDAO;
import loja.dao.conta.operacao.OperacoesDAO;
import loja.dao.despesa.DespesaDAO;
import loja.dao.despesa.cartao.CartaoCreditoCompraDAO;
import loja.dao.estoque.ItemEstoqueDAO;
import loja.dao.estoque.ItemPerdaEstoqueDAO;
import loja.dao.pessoa.cliente.ClienteDAO;
import loja.dao.produto.ProdutoDAO;
import loja.dao.produto.categoria.CategoriaDAO;
import loja.dao.produto.grupo.GrupoDAO;
import loja.dao.seguranca.SegurancaDAO;
import loja.dao.venda.VendaDAO;
import loja.model.conta.impl.ContaCartaoCreditoCompra;
import loja.model.conta.impl.ContaPrivada;
import loja.util.HibernateUtil;

public class HibernateDAOFactory implements DAOFactory {

	@Override
	public ClienteDAO getClienteDAO() {
		return new ClienteDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public GrupoDAO getGrupoDAO() {
		return new GrupoDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public CategoriaDAO getCategoriaDAO() {
		return new CategoriaDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public ProdutoDAO getProdutoDAO() {
		return new ProdutoDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public DespesaDAO getDespesaDAO() {
		return new DespesaDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public ItemEstoqueDAO getItemEstoqueDAO() {
		return new ItemEstoqueDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public ItemPerdaEstoqueDAO getItemPerdaEstoqueDAO() {
		return new ItemPerdaEstoqueDAOHibernate(HibernateUtil
				.getSessionFactory().getCurrentSession());
	}

	@Override
	public PedidoCompraDAO getPedidoCompraDAO() {
		return new PedidoCompraDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public CompraDAO getCompraDAO() {
		return new CompraDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public CartaoCreditoCompraDAO getCartaoCreditoCompra() {
		return new CartaoCreditoCompraDAOHibernate(HibernateUtil
				.getSessionFactory().getCurrentSession());
	}

	@Override
	public VendaDAO getVendaDAO() {
		return new VendaDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public SegurancaDAO getSeguracaDAO() {
		return new SegurancaDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

	@Override
	public OperacoesDAO getOperacaoDAO(Object obj) {

		if (obj == null)
			return new ContaCaixaDAOHibernate(HibernateUtil.getSessionFactory()
					.getCurrentSession());

		if (obj instanceof ContaPrivada) {
			ContaPrivada contaPrivada = (ContaPrivada) obj;
			return new ContaPrivadaDAOHibernate(HibernateUtil
					.getSessionFactory().getCurrentSession(), contaPrivada);
		}

		if (obj instanceof ContaCartaoCreditoCompra) {
			ContaCartaoCreditoCompra contaCartaoCreditoCompra = (ContaCartaoCreditoCompra) obj;
			return new ContaCartaoCreditoCompraDAOHibernate(HibernateUtil
					.getSessionFactory().getCurrentSession(),
					contaCartaoCreditoCompra);

		}

		return null;
	}

	@Override
	public ContaAbstrataDAO getContaAbstrataDAO() {
		return new ContaAbstrataDAOHibernate(HibernateUtil.getSessionFactory()
				.getCurrentSession());
	}

}
